kerberos.net
Interface KerberosSocket

All Known Implementing Classes:
KerberosTestSocket

public interface KerberosSocket

Die Kerberos-Socket-API

Programmiert wird gegen die Interfaces KerberosServerSocket, KerberosSocketFactory und KerberosSocket.
Das Interface KerberosSocket funktioniert im Prinzip wie ein normaler Socket, nur eben verschlüsselt und authentifiziert über Kerberos. Erzeugt wird ein KerberosSocket auf der Client-Seite von einer KerberosClientSocketFactory, mit der Methode connect(String, int String). Die KerberosClientSocketFactory sorgt für die Authentifizierung gegenüber dem KDC. Im KerberosSocket werden allerdings keine Streams zur Verfügung gestellt, sondern die entsprechenden print- und read-Methoden sind direkt im Socket enthalten. Durchs Netz werden immer Byte-Arrays übertragen. Wenn die Methode print(String) aufgerufen wird, dann werden die einzelnen Bytes des Strings durchs Netz geschickt. Es ist auf der Empfangsseite egal, ob eine Nachricht als Sring oder Byte-Array gelesen wird.
Auf der Serverseite arbeitet der KerberosServerSocket wie ein normaler java.net.ServerSocket.

Als konkrete Implementationen stehen die Klassen KerberosServerSocketImpl, KerberosClientSocketFactoryImpl zu Verfügung, welche die KerberosSockets erzeugen. Zum Erzeugung von KerberosClientsSocketFactory und KerberosServerSocket steht die KerberosFactory zur Verfügung.

Damit die LDAP-Leute schon praktisch gegen die Interfaces arbeiten können, stehen Testklassen zur Verfügung.

Dieses Interfaces dient für eine konkrete Verbindung zu einem Client. Diese ist dann schon aufgebaut und steht erfolgreich.

Author:
Stephan Koops
See Also:
KerberosFactory, KerberosServerSocket, KerberosServerSocketImpl, KerberosSocketC, KerberosSocketS, KerberosClientSocketFactory, KerberosClientSocketFactoryImpl

Method Summary
 void close()
          Beendet die Verbindung.
 java.net.InetAddress getInetAddress()
          Gibt die IP-Adresse zurück, zu dem der Socket verbunden ist.
 int getMaxArrayLength()
          Gibt die maximal erlaubte Länge für zu empfangende Arrays zurück.
 int getPort()
          Gibt den port zurück, zu dem der Socket verbunden ist.
 java.lang.String getUsername()
          Diese Methode gibt den Namen des Benutzers zurück, der sich eingeloggt hat.
 boolean isClosed()
           
 void print(byte[] zeichen)
          Schickt ein Byte-Array (oder einen String) sofort verschlüsselt durchs Netz.
 void print(java.lang.String zeichen)
          Schickt einen String durchs Netz
 byte[] printRead(byte[] zeichen)
          Jetzt die synchrone Variante ...
 java.lang.String printRead(java.lang.String zeichen)
           
 byte[] read()
          Liest die nächsten Daten aus und gibt sie als Byte-Array bzw. als String zurück.
 java.lang.String readString()
          Liest einen String aus dem Netz.
 void setMaxArrayLength(int i)
          Setzt die maximal erlaubte Länge für zu empfangende Nachrichten
 

Method Detail

print

public void print(byte[] zeichen)
           throws java.io.IOException,
                  PasswortFalschException,
                  ClientnameFalschException,
                  UnerwarteteNachrichtException,
                  NonceFalschException,
                  ErstEmpfangenException
Schickt ein Byte-Array (oder einen String) sofort verschlüsselt durchs Netz. Damit die Kerberos-Kontrolle, ob niemand alte Nachrichten nochmal sendet (replay), funktioniert, muss immer abwechslend eine Nachricht gesendet und eine empfangen werden, wobei der Client anfangen muss zu senden. Wenn die Anwendung keine Daten zu versenden hat, dann kann sie null, ein Byte-Array der Länge 0 oder einen leeren String (Länge 0) versenden. null kommt auf der gegenüberliegenden Seite nicht als null an, sondern als Byte-Array mit der Länge 0 bzw. als String der Länge 0. Alle Exceptions außer der IOException und der ConnectionResetException sind von KerberosException abgeleitet, so dass es reicht, die IOException und die KerberosException abzufangen, wenn man die Exceptions nicht weiter auswerten möchte.

Parameters:
zeichen - byte-Array (oder String), das/der verschickt werden soll.
Throws:
java.io.IOException - Wenn es Netzwerk-Probleme gab.
PasswortFalschException - Wenn eine Nachricht nicht entschlüsselt werden konnte, weil jemand ungültige Nachrichten eingespeißt hat
KerberosException - Alle hier geworfenen Exceptions außer die IOException erben von der Klasse KerberosException. Weiter Informationen in den jeweiligen Exception-Klassen.
ClientnameFalschException
UnerwarteteNachrichtException
NonceFalschException
ErstEmpfangenException
See Also:
read()

print

public void print(java.lang.String zeichen)
           throws java.io.IOException,
                  PasswortFalschException,
                  ClientnameFalschException,
                  UnerwarteteNachrichtException,
                  NonceFalschException,
                  ErstEmpfangenException
Schickt einen String durchs Netz

Throws:
java.io.IOException
PasswortFalschException
ClientnameFalschException
UnerwarteteNachrichtException
NonceFalschException
ErstEmpfangenException
See Also:
print(byte[]), readString()

printRead

public byte[] printRead(byte[] zeichen)
                 throws SendeArrayZuLangException,
                        java.io.IOException,
                        PasswortFalschException,
                        ClientnameFalschException,
                        TicketUngueltigException,
                        UnerwarteteNachrichtException,
                        NonceFalschException,
                        ErstEmpfangenException

Jetzt die synchrone Variante ...
Sendet das übergebenen Byte-Array (bzw. den String) verschlüsselt ab und wartet auf die Antwort vom Zieldienst. Liest die nächsten Daten aus und gibt sie als Byte-Array (bzw. als String) zurück. Es ist egal, ob die Daten von der gegenüberliegenden Seite als String oder als Byte-Array gesendet wurden.
Die Methode blockiert, wenn nicht genug Daten von der Gegenseite zur Verfügung stehen.

Alle Exceptions außer der IOException sind von KerberosException abgeleitet, so dass es reicht, die IOException und die KerberosException abzufangen, wenn man die Exceptions nicht weiter auswerten möchte.

Parameters:
zeichen -
Returns:
Schickt ein byte-Array durchs Netz, wartet auf die Antwort des Gegenüber und gint das empfangene Byte-Array zurück
Throws:
java.io.IOException
KerberosException - Alle hier geworfenen Exceptions außer IOException und ConnectionResetException erben von der Klasse KerberosException. Weiter Informationen in den jeweiligen Exception-Klassen.
SendeArrayZuLangException - Wird geworfen, wenn das gesendete Array zu lang war.
PasswortFalschException
ClientnameFalschException
TicketUngueltigException
UnerwarteteNachrichtException
NonceFalschException
ErstEmpfangenException
See Also:
print(byte[]), print(String), read(), readString()

printRead

public java.lang.String printRead(java.lang.String zeichen)
                           throws SendeArrayZuLangException,
                                  java.io.IOException,
                                  PasswortFalschException,
                                  ClientnameFalschException,
                                  TicketUngueltigException,
                                  UnerwarteteNachrichtException,
                                  NonceFalschException,
                                  ErstEmpfangenException
Throws:
SendeArrayZuLangException
java.io.IOException
PasswortFalschException
ClientnameFalschException
TicketUngueltigException
UnerwarteteNachrichtException
NonceFalschException
ErstEmpfangenException
See Also:
printRead(byte[])

read

public byte[] read()
            throws SendeArrayZuLangException,
                   java.io.IOException,
                   PasswortFalschException,
                   ClientnameFalschException,
                   NonceFalschException,
                   UnerwarteteNachrichtException,
                   TicketUngueltigException,
                   ErstSendenException
Liest die nächsten Daten aus und gibt sie als Byte-Array bzw. als String zurück. Es ist egal, ob die Daten von der anderen Seite als Byte-Array oder als String gesendet wurden. Blockiert, wenn nicht genug Daten zur Verfügung stehen. Alle Exceptions außer der IOException sind von KerberosException abgeleitet, so dass es reicht, die IOException und die KerberosException abzufangen, wenn man die Exceptions nicht weiter auswerten möchte.

Returns:
Gibt das nächste zur Verfügung stehende Byte-Array zurück. Blockiert, wenn keine (oder nicht genug Daten) zur Verfügung stehen.
Throws:
java.io.IOException - Wenn es Netzwerkprobleme gab
KerberosException - Alle hier geworfenen Exceptions außer die IOException erben von der Klasse KerberosException. Weiter Informationen in den jeweiligen Exception-Klassen.
SendeArrayZuLangException - Wird geworfen, wenn das letzte gesendete Array zu lang war. Der Entwickeler muss überlegen, ob er programmiert bekommt, dass er die Nachricht nochmal sendet oder die Verbindung beendet. In der Methode printRead(..) ist dies sicher einfacher.
PasswortFalschException
ClientnameFalschException
NonceFalschException
UnerwarteteNachrichtException
TicketUngueltigException
ErstSendenException
See Also:
printRead(byte[]), NonceFalschException, PasswortFalschException, ClientnameFalschException, UnerwarteteNachrichtException, ErstEmpfangenException

readString

public java.lang.String readString()
                            throws SendeArrayZuLangException,
                                   java.io.IOException,
                                   PasswortFalschException,
                                   ClientnameFalschException,
                                   NonceFalschException,
                                   UnerwarteteNachrichtException,
                                   ErstSendenException,
                                   TicketUngueltigException,
                                   ErstSendenException
Liest einen String aus dem Netz.

Throws:
SendeArrayZuLangException
java.io.IOException
PasswortFalschException
ClientnameFalschException
NonceFalschException
UnerwarteteNachrichtException
ErstSendenException
TicketUngueltigException
See Also:
read()

close

public void close()
           throws java.io.IOException
Beendet die Verbindung.

Throws:
java.io.IOException
See Also:
Socket.close()

isClosed

public boolean isClosed()
Returns:
Gibt zurück, ob der Socket geschlossen ist.

getUsername

public java.lang.String getUsername()
Diese Methode gibt den Namen des Benutzers zurück, der sich eingeloggt hat. Dies gilt auch auf der Client-Seite.


getMaxArrayLength

public int getMaxArrayLength()
Gibt die maximal erlaubte Länge für zu empfangende Arrays zurück.


setMaxArrayLength

public void setMaxArrayLength(int i)
                       throws ZahlNichtPositivException
Setzt die maximal erlaubte Länge für zu empfangende Nachrichten

Throws:
ZahlNichtPositivException
See Also:
getMaxArrayLength()

getInetAddress

public java.net.InetAddress getInetAddress()
Gibt die IP-Adresse zurück, zu dem der Socket verbunden ist.

See Also:
Socket.getInetAddress()

getPort

public int getPort()
Gibt den port zurück, zu dem der Socket verbunden ist.

See Also:
Socket.getPort()